Skip to content

Conversation

simon-id
Copy link
Member

@simon-id simon-id commented Jul 11, 2025

What does this PR do?

Add RASP support for Fastify.

This require creating a new system called "block delegation". Instead of blocking responses synchronously in the middle of a request/response cycle with block(). We register a "block delegation" with registerBlockDelegation() that will be picked up when the user/framework call response ending methods (res.writeHead(), res.end(), res.write()), and will then call the normal block() to send our blocking response in lieu of the user's response. A good ol' switcharoo.
This is to allow frameworks to follow their full request life-cycles, instead of us abruptly breaking continuity. For example it allows Fastify to call the onError, onSend and onResponse hooks correctly, which in turns allow more control on the cleanup of the request by the users.

ST PR: DataDog/system-tests#4963

@simon-id simon-id changed the title push repro Fastify RASP Jul 11, 2025
Copy link

github-actions bot commented Jul 16, 2025

Overall package size

Self size: 11.93 MB
Deduped: 111.54 MB
No deduping: 111.89 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.1.0 | 20.37 MB | 20.37 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.9.0 | 9.77 MB | 10.1 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.6 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.14.2 | 122.36 kB | 850.93 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

Copy link

codecov bot commented Jul 16, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 84.08%. Comparing base (aed71a8) to head (016142b).
⚠️ Report is 1 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6081      +/-   ##
==========================================
+ Coverage   83.99%   84.08%   +0.09%     
==========================================
  Files         477      477              
  Lines       20071    20089      +18     
==========================================
+ Hits        16858    16892      +34     
+ Misses       3213     3197      -16     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@pr-commenter
Copy link

pr-commenter bot commented Jul 16, 2025

Benchmarks

Benchmark execution time: 2025-09-03 10:27:34

Comparing candidate commit 016142b in PR branch simon-id/fastify_rasp with baseline commit aed71a8 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1278 metrics, 45 unstable metrics.

@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented Aug 6, 2025

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 016142b | Docs | Was this helpful? Give us feedback!

@simon-id simon-id changed the title Fastify RASP Fastify RASP support Aug 13, 2025
@simon-id simon-id marked this pull request as ready for review August 13, 2025 08:09
@simon-id simon-id requested a review from a team as a code owner August 13, 2025 08:09
Co-authored-by: Carles Capell <[email protected]>
@simon-id simon-id requested a review from a team as a code owner August 28, 2025 03:47
Comment on lines +310 to +312
// if (isBlocking()) {
// return
// }
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this code comment expected to be here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes it's a for later todo

Copy link
Collaborator

@uurien uurien left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit comment added, but lgtm, approving the PR

@simon-id simon-id merged commit 75856dd into master Sep 3, 2025
695 checks passed
@simon-id simon-id deleted the simon-id/fastify_rasp branch September 3, 2025 10:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants